// Copyright 2024 Tvux
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

package _013

// romanToInt
// 如果前一个罗马数字小于当前数字，那么前一个数字应该取相反数，然后把所有求和即可
func romanToInt(s string) int {
	m := map[byte]int{
		'I': 1,
		'V': 5,
		'X': 10,
		'L': 50,
		'C': 100,
		'D': 500,
		'M': 1000,
	}
	res := 0
	for i := 1; i < len(s); i++ {
		prev, curr := m[s[i-1]], m[s[i]]
		if prev < curr {
			res -= prev
		} else {
			res += prev
		}
	}
	return res + m[s[len(s)-1]]
}

//func romanToInt(s string) int {
//	m := map[byte]int{
//		'I': 1,
//		'V': 5,
//		'X': 10,
//		'L': 50,
//		'C': 100,
//		'D': 500,
//		'M': 1000,
//	}
//	res := 0
//	i := 0
//	for ; i < len(s)-1; i++ {
//		if s[i] == 'I' {
//			if s[i+1] == 'V' {
//				res += 4
//				i++
//			} else if s[i+1] == 'X' {
//				res += 9
//				i++
//			} else {
//				res += m[s[i]]
//			}
//		} else if s[i] == 'X' {
//			if s[i+1] == 'L' {
//				res += 40
//				i++
//			} else if s[i+1] == 'C' {
//				res += 90
//				i++
//			} else {
//				res += m[s[i]]
//			}
//		} else if s[i] == 'C' {
//			if s[i+1] == 'D' {
//				res += 400
//				i++
//			} else if s[i+1] == 'M' {
//				res += 900
//				i++
//			} else {
//				res += m[s[i]]
//			}
//		} else {
//			res += m[s[i]]
//		}
//	}
//	// 还有最后一个字符
//	if i != len(s) {
//		res += m[s[i]]
//	}
//	return res
//}
